#!/bin/bash


aceptadosDIR="$ACEPDIR"
rechazadosDIR="$RECHDIR"
procesadosDIR="$ACEPDIR/proc"
expedientesDIR="$ACEPDIR"
listaSaldosDIR="$MAEDIR/soldes/soldes.lis"
expOutPutDIR="$REPODIR/exp_output"
expOutPutDIRBkp="$REPODIR/vieux"
COMANDO="Cdossier.sh"
EXISTE=1;
NO_EXISTE=0;

### funcion usada para recuperar el campo 'saldo' del registro que tenga 'cbu' #####
function recuperarSaldo() {
	regs=$(grep "$1" "$listaSaldosDIR")


	# IFS = ES EL CARACTER SEPARADOR/TOKENIZADOR
	viejoIFS=$IFS 	# guardo el viejo separador
	IFS=$";" 		# seteo el tokenizador = salto de linea
	campos=($regs) 	# creo el vector
	IFS=$viejoIFS 	# seteo el tokenizador al antiguo/original

	#valor de retorno que atrapa la variable "saldo"
	echo "${campos[3]}"
}

function actualizarRegistro() {
	reg=$1
	clave=$2

	echo "reg: $reg"
	echo "clave: $clave"
	### elimino el registro con clave ###
	sed -i "/^$clave/d" $expOutPutDIR

	### lo agrego al archivo ###
	echo "$reg" >> $expOutPutDIR
}

function existe_clave()
{

    if [  `grep -c "^$1" $expOutPutDIR` -eq 0 ]
    then 
      return $EXISTE;
    else
      return $NO_EXISTE;
    fi
}


#funcion para logear#
function log() {
        command=$1
        message=$2 
        type=$3
       if [ $# -ge 2 ] && [ $# -le 3 ] 
      then
			Logging.sh "$command" "$message" "$type" 
       fi
}





lista_expedientes=$(ls -1p | grep '^[A-Za-z0-9._-]*@[A-Za-z0-9._-]*$')

############# AL LOG ############################################
#echo "Inicio Cdossier" ##########################################
#echo "Archivos de expedientes aceptados: $lista_expedientes" ####
#################################################################

log "$COMANDO" "Inicio Cdossier" "I"

lista_archivos=$(ls -1p $aceptadosDIR| grep '^[A-Za-z0-9._-]*@[A-Za-z0-9._-]*$')

#### SI NO HAY ARCHIVOS PARA PROCESAR, ENTONCES TERMINA #########
if [ -z "$lista_archivos" ]; then
	echo "NO HAY ARCHIVOS PARA PROCESAR "
	log "$COMANDO" "Fin Cdossier" "I"
	exit 1
fi
log "$COMANDO" "Archivos de expedientes aceptados: $lista_expedientes" "I"

#### CREO EL VECTOR CON LOS NOMBRES DE LOS ARCHIVOS #############
viejoIFS=$IFS 				# guardo el viejo separador
IFS=$'\n' 					# seteo el tokenizador = salto de linea
archivos=($lista_archivos) 	# creo el vector
IFS=$viejoIFS 				# seteo el tokenizador al antiguo/original

for archivo in ${archivos[@]}
do
	
	
        registrosRechazados=0;
        registrosLeidos=0;
        registrosAgregados=0;
        registrosReemplazados=0;

	############# AL LOG ############################################
	#echo "Archivo a procesar: $archivo" #############################
	#################################################################
	log "$COMANDO" "Archivo a procesar: $archivo"  "I"

	#### CHEQUEO QUE NO HAYA SIDO PROCESADO ANTERIORMENTE #######
	#### (me fijo si existe en la carpeta de procesados) ########
	if [ -f $procesadosDIR/$archivo ]; then
	       log "$COMANDO" "Archivo duplicado. Se rechaza el archivo"  "I"
	    #   mv "$aceptadosDIR/$archivo" "$rechazadosDIR/$archivo"
	        Mover.sh "$aceptadosDIR/$archivo" "$rechazadosDIR"

		############# AL LOG ####################################
		#echo "Archivo duplicado. Se rechaza el archivo" #########
		#########################################################
		continue
	fi

		### RESCATO LA CAMARA Y EL TRIBUNAL ###############################
	viejoIFS=$IFS 	# guardo el viejo separador
	IFS=$"@"		# seteo el tokenizador = punto y coma
	campos=($archivo) 	# creo el vector
	IFS=$viejoIFS 	# seteo el tokenizador al antiguo/original

	camara="${campos[0]}"
	tribunal="${campos[1]}"

	echo "camara: $camara tribunal: $tribunal"
	
	HOY=$(date +%Y-%m-%d-%H:%M:%s)
	cat "$expOutPutDIR" >> "$REPODIR/exp_output.$HOY"
	Mover.sh "$REPODIR/exp_output.$HOY"  "$expOutPutDIRBkp"

	#### LEO LINEA POR LINEA EL ARCHIVO QUE ESTAMOS PROCESANDO #####
	while read lineConSaltoDeLinea 
	do
		#echo $lineConSaltoDeLinea
                let "registrosLeidos +=1"
		line="${lineConSaltoDeLinea%?}"


	### SEPARO EL REGISTRO DEL "camaras@tribunal" EN CAMPOS ###############################
		viejoIFS=$IFS 	# guardo el viejo separador
		IFS=$";"		# seteo el tokenizador = punto y coma
		campos=($line) 	# creo el vector
		IFS=$viejoIFS 	# seteo el tokenizador al antiguo/original

		expediente="${campos[1]}"
		caratula="${campos[0]}"
		estado="${campos[2]}"
		cbu="${campos[3]}"
		saldo=""
		ACCION=""

		long_cbu=${#cbu}
		echo "largo cbu: $long_cbu"
		echo "caratula: $caratula expediente: $expediente estado: $estado cbu: $cbu"
		#### ACCION = campo 'accion' que se tiene q completar segun lo que diga ##
		#### el campo 'estado' del registro que esta en $line          ##
	

		### primero cheqeuo que tenga un estado valido, sino lo ignoro y sumo 1 a los ignorados ######
		if  [ "$estado" != "CUMPLIMIENTO" ] &&
			[ "$estado" != "EN GESTION" ] && [ "$estado" != "REMITIDO" ] &&
			[ "$estado" != "SIN CUENTA ASOCIADA" ] &&
			[ "$estado" != "A DESPACHO" ] && [ "$estado" != "EN CASILLERO" ]; then
			let "registrosRechazados += 1"
			continue
		fi

		#### si tiene estado = CUMPLIMIENTO ###########################
		if [ "$estado" = "CUMPLIMIENTO" ]; then
			ACCION="PEDIDO URGENTE PARA LIBERAR CUENTA"
		fi

		#### chequeo si tiene o no cbu informada ########################################
		if [ $long_cbu -eq 0 ]; then
			#### si no tiene CBU informada ##############################################
			#### si tiene estado = SIN CUENTA ASOCIADA ###########################
			if [ "$estado" = "SIN CUENTA ASOCIADA" ]; then
				ACCION="PEDIDO ESTANDAR DE ASIGNACION DE CUENTA"
			fi
			#### si tiene estado = EN GESTIO ó REMITIDO ###########################
			if [ "$estado" = "EN GESTION" ] || [ "$estado" = "REMITIDO" ]; then
				ACCION="ESPERAR 48 HORAS PARA RECLAMAR ASIGNACION DE CUENTA"
			fi
			#### si tiene estado = A DESPACHO ó EN CASILLERO ###########################
			if [ "$estado" = "A DESPACHO" ] || [ "$estado" = "EN CASILLERO" ]; then
				ACCION="ESPERAR 96 HORAS PARA RECLAMAR ASIGNACION DE CUENTA"
			fi
		else
			#### si tiene CBU informada ##############################################

			# recupero el saldo de la lista maestra de saldo "soldes.lis"
			#recuperarSaldo $cbu
			saldo=$(recuperarSaldo $cbu)

			echo "saldo retornado: $saldo"
			if [ $long_cbu -eq 22 ]; then
				if [ $saldo ]; then
					ACCION="PEDIDO URGENTE EMBARGAR CON CBU INFORMADA"
				else
					ACCION="ESPERAR 48 HORAS PARA HACER RECLAMO CON CBU INFORMADA"
				fi
			else
				ACCION="PEDIDO URGENTE ASIGNAR NUEVA CBU POR CBU INCORRECTA"
			fi
		fi
                
                # armo el registro exp_output
		reg_exp_output="$camara;$tribunal;$expediente;$caratula;$estado;$cbu;$saldo;$ACCION"
		adelante=$(echo "$expediente" | cut -f1 -d"/")
		atras=$(echo "$expediente" | cut -f2 -d"/")
		expedienteParaSed=$adelante
		expedienteParaSed+='\/'
		expedienteParaSed+=$atras

		clave="$camara;$tribunal;$expedienteParaSed"
                existe_clave $clave
                
                if [ $? -eq $EXISTE ]
                then 
                   let "registrosReemplazados+=1"
    
                else
                    let "registrosAgregados+=1"
                fi

		actualizarRegistro "$reg_exp_output" "$clave"

		#ver si existe en el exp_output, comparando la clave 'camara+tribunal+exp'
	done < $aceptadosDIR/$archivo
	
	  Mover.sh "$aceptadosDIR/$archivo" "$procesadosDIR"
	  log "$COMANDO" "registros Rechazados: $registrosRechazados" "I"
          log "$COMANDO" "registros Leidos: $registrosLeidos" "I"
          log "$COMANDO" "registros Agregados: $registrosAgregados" "I"
          log "$COMANDO" "registros Reemplazados: $registrosReemplazados" "I"

done
log "$COMANDO" "Fin Cdossier"  "I"